package frsf.cidisi.exercise.tp2.situationCalculus;

import frsf.cidisi.faia.agent.ActionFactory;
import frsf.cidisi.faia.agent.Perception;
import frsf.cidisi.faia.agent.situationcalculus.KnowledgeBase;
import frsf.cidisi.faia.agent.situationcalculus.SituationCalculusPerception;
import frsf.cidisi.faia.exceptions.PrologConnectorException;


public class EstadoActualArqueologo extends KnowledgeBase {

	private int posicionAgente = 1;
	private double tesoroAcoplado = 0;
	private double pesoAcopladoAgente = 0;
	private String posicionDeseada = "Cenede";
	private String posicionInicial = "Aragaey";
	private String[] nombreAldeas = {"Aragaey","Ase","Bresol","Bulovoe","Cabe","Cenede","Ergintone","Icaedur","Mixocu","Peregay","Vinizaile"}; 
	
    public EstadoActualArqueologo() throws PrologConnectorException {

        super("arqueologo3.pl");

        this.initState();
    }

    @Override
    public ActionFactory getActionFactory() {
        return ArqueologoActionFactory.getInstance();
    }

    @Override
    public String getSituationPredicate() {
        return "actualSituation";
    }

    @Override
    public String getBestActionPredicate() {
        return "bestAction";
    }

    @Override
    public String getExecutedActionPredicate() {
    	  return "executedAction";
    }

    @Override
    public void updateState(Perception p) {
        this.tell((SituationCalculusPerception) p);
    }

    @Override
    public void initState() {
       
    	int visitadas[] = {0,0,0,0,0,0,0,0,0,0,0};
    	
		this.addKnowledge("posicion(\""+posicionInicial+"\",0)");
    
    	visitadas[posicionAgente-1] = 1;
    	
    	for(int i=0;i<11;i++){
    		
    		this.addKnowledge("visitada("+nombreAldeas[i]+","+visitadas[i]+",0)");
    
    	}
      	
    	this.addKnowledge("goalReached(S) :- posicion(\""+posicionDeseada+"\",S)");
    }

    @Override
    public String toString() {
        String str = "Posicion: "+posicionAgente+" Tesoro: "+tesoroAcoplado;
       
        return str;
    }

	public void setPosicionAgente(int posicionAgente) {
		this.posicionAgente = posicionAgente;
	}

	public int getPosicionAgente() {
		return posicionAgente;
	}

	public void setTesoroAcoplado(double tesoroAcoplado) {
		this.tesoroAcoplado = tesoroAcoplado;
	}

	public double getTesoroAcoplado() {
		return tesoroAcoplado;
	}

	public void updateObjetivo() {
	
		this.addKnowledge("goalReached(S) :- posicion(\""+posicionDeseada+"\",S)");
	}

	public void setPosicionDeseada(String posicionDeseada) {
		this.posicionDeseada = posicionDeseada;
	}

	public String getPosicionDeseada() {
		return posicionDeseada;
	}

	public void setPesoAcopladoAgente(double pesoAcopladoAgente) {
		this.pesoAcopladoAgente = pesoAcopladoAgente;
	}

	public double getPesoAcopladoAgente() {
		return pesoAcopladoAgente;
	}

	public void setPosicionInicial(String posicionInicial) {
		this.posicionInicial = posicionInicial;
	}

	public String getPosicionInicial() {
		return posicionInicial;
	}

}
